Same Tree
Given the roots of two binary trees p and q, write a function to check if they are the same or not.
Two binary trees are considered the same if they are structurally identical, and the nodes have the same value.
Example 1:
Input: p = [1,2,3], q = [1,2,3]
Output: true
Example 2:
Input: p = [1,2], q = [1,null,2]
Output: false
Example 3:
Input: p = [1,2,1], q = [1,1,2]
Output: false
Constraints:
The number of nodes in both trees is in the range [0, 100].
-10^4 <= Node.val <= 10^4
My Solution
We can solve this problem with a preorder traversal of both trees simultaneously. If the nodes are both null, we return true. If one of the nodes is null and the other is not, we return false. If the nodes don’t have the same value, we return false. And then we just recursively traverse the left and right subtrees of both nodes. If either left or right subtree returns false, we return false. If both return true, we return true.
Algorithmic time complexity would be O(n), where n is the total number of nodes in both trees. Space complexity is O(1), since we require only constant extra space.
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public boolean isSameTree(TreeNode p, TreeNode q) {
if (p == null && q == null) {
return true;
}
if (!(p != null && q != null)) {
return false;
}
if (p.val != q.val) {
return false;
}
if (!isSameTree(p.left, q.left)) {
return false;
}
return isSameTree(p.right, q.right);
}
}